package com.fy.fyspace.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.fy.fyspace.common.result.R;
import com.fy.fyspace.model.dto.picture.*;
import com.fy.fyspace.model.entity.Picture;
import com.fy.fyspace.model.vo.user.UserSessionVO;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

/**
 * 图片服务接口
 */
public interface PictureService extends IService<Picture> {

    /**
     * 获取图片列表
     *
     * @param pictureListQueryDTO
     * @return
     */
    R getPictureList(PictureListQueryDTO pictureListQueryDTO);

    /**
     * 上传图片
     * 支持单张或多张图片上传
     *
     * @param files       图片文件数组
     * @param namePrefix  文件名前缀
     * @param tags        标签字符串，以逗号分隔
     * @param category    分类
     * @param description 描述
     * @param isPublic    是否公开
     * @return 处理结果
     */
    R uploadImages(MultipartFile[] files,
                        String namePrefix,
                        String tags,
                        String category,
                        String description,
                        Integer isPublic);

    /**
     * 获取图片统计数据
     */
    R getStatistics();

    /**
     * 获取图片详情
     */
    R getPictureDetail(Long pictureId);

    /**
     * 更新图片信息
     */
    R updatePicture(Long pictureId, PictureUpdateDTO request);

    /**
     * 批量删除图片
     */
    R batchDeletePictures(PictureBatchDeleteDTO request);

    /**
     * 根据颜色搜索图片
     *
     * @param color
     * @return
     */
    R searchByColor(String color);

    @Transactional(rollbackFor = Exception.class)
    R editPicture(Long pictureId, MultipartFile file, String tags,
                       String category, String description);

    /**
     * 获取待审核的图片列表
     */
    R getUploadingPictures(Integer page, Integer pageSize, String description, Integer reviewStatus,String category, String tags);

    /**
     * 批量获取图片链接
     * @param pictureUploadByBatchRequest
     * @param userSessionVO
     * @return
     */
    public R getBingImageUrls(PictureUploadByBatchDTO pictureUploadByBatchRequest, UserSessionVO userSessionVO);

    /**
     * 批量获取用户对图片的点赞和收藏状态
     * @param picIds 逗号分隔的图片ID字符串
     * @return 每个图片的id、isLiked、isFavorited字段
     */
    R batchLikeFavoriteStatus(String picIds);

}
